import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import util.ExcelSheetColInfo;
import util.ExcelSheetInfo;
import util.ExportUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
 * @author changfei
 * @date  2023/12/1 11:46
 * @description
 */
public class TestExportExcel {
 public static void main(String[] args) throws IOException {

  List< SaveBudgetBillExcelReq > saveBudgetBillExcelReqs=new ArrayList<>();
  SaveBudgetBillExcelReq saveBudgetBillExcelReq=new SaveBudgetBillExcelReq();
  saveBudgetBillExcelReq.setBudgetSubjectCode("carBudgetSubject");
  saveBudgetBillExcelReq.setBudgetSubjectName("用车预算科目");
  saveBudgetBillExcelReq.setBudgetPrincipalCode("carBudget");
  saveBudgetBillExcelReq.setBudgetPrincipalName("用车接入预算");
  saveBudgetBillExcelReq.setBudgetCenterCode("carBudgetCenter");
  saveBudgetBillExcelReq.setBudgetCenterName("用车接入预算中心");
  saveBudgetBillExcelReq.setBudgetBillCfgCode("carAdjust");
  saveBudgetBillExcelReq.setBudgetBillCfgTitle("调整");
  saveBudgetBillExcelReq.setBudgetVersionCode("carBudgetVersion");
  saveBudgetBillExcelReq.setBudgetVersionName("用车接入预算版本");
  saveBudgetBillExcelReq.setRemark("111");
  saveBudgetBillExcelReq.setBudgetPeriod("2023-12");
  saveBudgetBillExcelReq.setBudgetAmount("2000211100");

  SaveBudgetBillExcelReq saveBudgetBillExcelReq2=new SaveBudgetBillExcelReq();

  saveBudgetBillExcelReq2.setBudgetSubjectCode("carBudgetSubject");
  saveBudgetBillExcelReq2.setBudgetSubjectName("用车预算科目");
  saveBudgetBillExcelReq2.setBudgetPrincipalCode("carBudget");
  saveBudgetBillExcelReq2.setBudgetPrincipalName("用车接入预算");
  saveBudgetBillExcelReq2.setBudgetCenterCode("carBudgetCenter");
  saveBudgetBillExcelReq2.setBudgetCenterName("用车接入预算中心");
  saveBudgetBillExcelReq2.setBudgetBillCfgCode("carAdjust");
  saveBudgetBillExcelReq2.setBudgetBillCfgTitle("调整");
  saveBudgetBillExcelReq2.setBudgetVersionCode("carBudgetVersion");
  saveBudgetBillExcelReq2.setBudgetVersionName("用车接入预算版本");
  saveBudgetBillExcelReq2.setRemark("111");
  saveBudgetBillExcelReq2.setBudgetPeriod("2023-12");
  saveBudgetBillExcelReq2.setBudgetAmount("-2001.22");
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq);
  //校验数据重复
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);
  saveBudgetBillExcelReqs.add(saveBudgetBillExcelReq2);


  ExcelSheetInfo excelSheetInfo = new ExcelSheetInfo();
  excelSheetInfo.setSheetName("预算信息");
  excelSheetInfo.setHeadDesc("填写须知：\n" +
          "• 请不要对Excel模板中的信息类别（列名）进行修改；\n" +
          "• 请勿跨表单创建预算，如预算单据编码及名称不一致则信息无法导入；\n" +
          "• 请勿重复填写预算，如两行数据除金额不同其余信息均一致则无法导入；\n" +
          "• 每列值的填写规范，可通过表头的单元格批注查看；");
  //excelSheetInfo.setHeadDesc("");
  List<ExcelSheetColInfo> colInfos = new ArrayList<>();
  colInfos.add(new ExcelSheetColInfo("budgetBillCfgCode", "预算单据编码", "必填，请填写启用的预算单据编号"));
  colInfos.add(new ExcelSheetColInfo("budgetBillCfgTitle", "预算单据描述", "必填，请填写启用的预算单据名称"));
  colInfos.add(new ExcelSheetColInfo("budgetVersionCode", "预算版本编码", "必填，请填写预算单据分配的预算版本编码，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetVersionName", "预算版本名称", "必填，请填写正确的预算版本名称，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetPrincipalCode", "预算主体编码", "必填，请填写已启用的预算主体编码，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetPrincipalName", "预算主体名称", "必填，请填写已启用的预算主体名称，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetCenterCode", "预算中心编码", "必填，请填写预算主体下已启用的成本中心编码，填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetSubjectName", "预算中心名称", "必填，请填写预算主体下已启用的成本中心名称，填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetSubjectCode", "预算科目编码", "必填，请填写预算单据分配的预算科目编码，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetSubjectName", "预算科目名称", "必填，请填写预算单据分配的预算科目名称，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetPeriod", "预算期间", "请填写预算单据适用的预算期间，如填写不正确此行数据将无法导入"));
  colInfos.add(new ExcelSheetColInfo("budgetAmount", "预算金额", "必填，请输入预算金额（数字），如输入不正确此行数据将无法导入","#,##0.0"));
  colInfos.add(new ExcelSheetColInfo("remark", "备注", "选填，可输入备注信息，最多输入200个字，超出限制此行数据将无法导入"));
  //colInfos.add(new ExcelSheetColInfo("errorMsg", "异常信息"));
  excelSheetInfo.setCols(colInfos);
  excelSheetInfo.setDatas(saveBudgetBillExcelReqs);

  SXSSFWorkbook workbook = ExportUtils.createExcel(Arrays.asList(excelSheetInfo));
  workbook.write(new FileOutputStream(new File("/Users/changfei/4.xlsx")));
  workbook.close();



 }
}
